{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 04\n",
    "\n",
    "# 处理代数式\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfbc8db0-55ac-4f99-8e93-09aed5b107cd",
   "metadata": {},
   "source": [
    "这段代码使用了SymPy库来执行符号数学运算，其功能包括定义符号变量、简化表达式、展开多项式、因式分解多项式，以及对表达式进行变量项的收集。\n",
    "\n",
    "首先，代码通过 $x, y, z = symbols('x y z')$ 定义了三个符号变量 $x, y, z$，以便后续进行符号数学操作。这些变量是符号对象，而非具体的数值变量。\n",
    "\n",
    "### 简化表达式\n",
    "代码定义了一个表达式 $expr_1 = \\sin^2(x) - \\cos^2(x)$，这是一个基于三角函数的表达式。根据三角恒等式：\n",
    "$$\\sin^2(x) - \\cos^2(x) = -\\cos(2x),$$\n",
    "代码可以进一步对其进行化简，但化简过程在此代码中未明确执行。\n",
    "\n",
    "### 展开多项式\n",
    "接下来，代码定义了一个多项式表达式 $expr_2 = (x + 1)^3$，表示 $(x + 1)$ 的三次方。如果展开该表达式，使用二项式定理：\n",
    "$$(x + 1)^3 = x^3 + 3x^2 + 3x + 1.$$\n",
    "代码中的 `expr_2` 可以用来展示多项式的原始形式和展开形式。\n",
    "\n",
    "### 因式分解多项式\n",
    "然后，代码定义了一个三次多项式 $expr_3 = x^3 + 2x^2 - x - 2$，并对其执行因式分解。如果手动计算，可尝试分组因式分解：\n",
    "$$x^3 + 2x^2 - x - 2 = (x^2 - 1)(x + 2) = (x - 1)(x + 1)(x + 2).$$\n",
    "代码中的表达式可以通过 SymPy 的工具自动完成类似的分解。\n",
    "\n",
    "### 收集表达式中的变量项\n",
    "最后一段代码定义了一个新的表达式 $expr_collected$，它将 $expr_3 - x^2 - 2x$中的 $x$ 项进行收集。表达式可展开为：\n",
    "$$expr_3 - x^2 - 2x = x^3 + 2x^2 - x - 2 - x^2 - 2x = x^3 + x^2 - 3x - 2.$$\n",
    "随后，通过 `collect` 函数，代码会将所有含 $x$ 的项分组，以便观察变量的分布或简化运算。\n",
    "\n",
    "总之，这段代码的主要目的是演示如何用符号数学方法处理表达式，包括简化、展开、因式分解和变量项收集。这些功能广泛应用于符号计算、数学建模和公式推导等领域。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "183a5e62-97a6-4266-bf6b-a7d02881fb0f",
   "metadata": {},
   "source": [
    "## 导入所需的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e65f651f-adb2-42e0-9e91-d5650fd5266c",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import *  # 导入SymPy库，用于符号数学计算\n",
    "# 定义符号变量 x, y, z，方便进行符号运算\n",
    "x, y, z = symbols('x y z')  # 定义符号变量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28164217-da31-4749-9e91-db1325666972",
   "metadata": {},
   "source": [
    "## 简化数学表达式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e34fec06-927c-4fda-8d14-765563310995",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin^{2}{\\left(x \\right)} - \\cos^{2}{\\left(x \\right)}$"
      ],
      "text/plain": [
       "sin(x)**2 - cos(x)**2"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义表达式 expr_1 为 sin(x)**2 - cos(x)**2\n",
    "expr_1 = sin(x)**2 - cos(x)**2  # 定义表达式，表示正弦平方减去余弦平方\n",
    "expr_1  # 输出表达式，查看原始形式"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b5261ba-9448-4bd7-ae16-d2621fa158da",
   "metadata": {},
   "source": [
    "## 展开多项式表达式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cc0fa8ed-24eb-477d-9cb4-4cdf988c1f02",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(x + 1\\right)^{3}$"
      ],
      "text/plain": [
       "(x + 1)**3"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义表达式 expr_2 为 (x + 1)**3\n",
    "expr_2 = (x + 1)**3  # 定义表达式，表示 (x+1) 的三次方\n",
    "expr_2  # 输出表达式，查看原始形式"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4efd68d1-5b35-4ada-b304-dcdcc0947759",
   "metadata": {},
   "source": [
    "## 将多项式分解为不可约因子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "667aa4fd-7317-480d-b820-1a70f61abb0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{3} + 2 x^{2} - x - 2$"
      ],
      "text/plain": [
       "x**3 + 2*x**2 - x - 2"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义表达式 expr_3 为 x**3 + 2*x**2 - x - 2\n",
    "expr_3 = x**3 + 2*x**2 - x - 2  # 定义多项式表达式\n",
    "expr_3  # 输出表达式，查看原始形式"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1676d8cf-0a7c-4316-a679-8ef71e3b91b2",
   "metadata": {},
   "source": [
    "## 收集表达式中公共的幂次项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c3015ac9-7dd9-47d3-8e6b-edd3b7b3a2d0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{3} + x^{2} - 3 x - 2$"
      ],
      "text/plain": [
       "x**3 + x**2 - 3*x - 2"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对 expr_3 - x**2 - 2*x 表达式中的 x 项进行收集\n",
    "expr_collected = collect(expr_3 - x**2 - 2*x, x)  # 使用 collect 函数收集表达式中的 x 项\n",
    "expr_collected  # 输出收集后的表达式"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
